home *** CD-ROM | disk | FTP | other *** search
- Hinweise zum Programmieren mit SOZOBON C für ATARI-TOS Programme.
-
- 1. Accessories programmieren.
-
- Da nicht alle TOS versionen den environment Zeiger in der Basepage setzten,
- empfehle ich im main Module eine der folgenden Funktionen einzufügen:
-
- Wenn environment Variablen nicht benötigt werden:
-
- char *getenv(char *var)
- {
- return(NULL);
- }
-
-
- ansonsten:
-
- char *getenv( char *var)
- {
- char *string;
-
- if (gl_apversion == 0) /* don't call before appl_init() */
- return(NULL);
- shel_envrn(&string, var)
- if (string) {
- if (*string == '=') /* is this if/else okay ?? */
- return(++string);
- else
- return("");
- } else
- return NULL;
-
- } /* acc getenv() routine */
-
-
- Ein weiters Problem bei Accessories ist der dynamische Speicher Zugriff.
- Sie können normalerweise Speicher nicht über einen AC_CLOSE event hinweg
- behalten. Und andererseits ist nicht so leicht festzustellen ob der Speicher
- freigegeben werden muß, oder es schon ist.
-
- Dazu gibt es die Funktion
-
- extern BASEPAGE *Getbpact_pd();
-
- Sie ist nach dem ersten malloc() bzw. Malloc() aufzurufen, wobei der Wert
- gespeichert werden sollte. (etwa in BASEPAGE *m_act_bp)
-
- BASEPAGE *m_act_pd; /* global variable */
-
- /* malloc() erfolgreich, und nun: */
- if(!m_act_pd)
- m_act_pd = Getbpact_pd();
-
- Nach einem AC_CLOSE sollte dann die Funktion aufgerufen werden die den
- Speicher freigibt. Mit folgendem code Beispiel kann getestet werden,
- ob der Speicher noch freigegeben werden muß:
-
- BASEPAGE *c_act_pd;
-
- if ((gl_apid >= 0x300) || (m_act_pd == (c_act_pd = Getbpact_pd()) )||
- (m_act_pd == c_act_pd->p_parent) ){
- /* Speicher freigeben */
- }
- /* alle Referencen auf den Speicher löschen */
-
- m_act_pd = NULL;
- /* wieder auf Null setzten, damit beim nächsten malloc()/Malloc() der
- aktuelle Wert eingetragen werden kann. */
-
- Analog kann mensch natürlich so auch rauskriegen, ob der Speicher behalten
- werden kann. Doch diese Abfrage ist etwas komplizierter.
-